package br.com.vti.leilao.view.util;

import java.io.Serializable;
import java.util.ResourceBundle;

public interface MessageFactory extends Serializable {

    public static final int SEVERITY_INFO = 0;
    public static final int SEVERITY_WARN = 1;
    public static final int SEVERITY_ERROR = 2;
    public static final int SEVERITY_FATAL = 3;

    /**
     * Retorna o ResourceBundle utilizado pela aplicação
     * @return bundle - arquivo de mensagens
     */
    ResourceBundle getApplicationBundle();

    /**
     * Retorna o ResourceBundle utilizado pelo nome
     * @param bundleName nome do arquivo
     * @return bundle - arquivo de mensagens
     */
    ResourceBundle getBundle(String bundleName);

    /**
     * Acusa a existência de algum erro
     * @return boolean - (true = um ou mais erro encontrados, false = nelhum erro encontrado)
     */
    boolean isMessageErro();

    /**
     * Seta uma mensagem no FacesContext
     * @param clientId id do cliente
     * @param msg texto da mensagem
     * @param severity tipo da mensagem (Info, Error, Warning, Fatal)
     */
    void addMessage(String clientId, String msg, int severity);

    /**
     * Seta uma mensagem info no FacesContext
     * @param msg texto da mensagem
     */
    void addInfoMessage(String msg);

    /**
     * Seta uma mensagem error no FacesContext
     * @param msg texto da mensagem
     */
    void addErrorMessage(String msg);

    /**
     * Seta uma mensagem warning no FacesContext
     * @param msg texto da mensagem
     */
    void addWarnMessage(String msg);

    /**
     * Seta uma mensagem fatal no FacesContext
     * @param msg texto da mensagem
     */
    void addFatalMessage(String msg);

    /**
     * Busca uma mensagem
     * @param key chave da mensagem
     * @param parametros parametros da mensagem
     * @return mensagem
     */
    String getMessage(String key, Object... parametros);

    /**
     * Busca uma mensagem
     * @param rb resource bundle
     * @param key chave da mensagem
     * @param parametros parametros da mensagem
     * @return mensagem
     */
    String getMessageRb(ResourceBundle rb, String key, Object... parametros);

    /**
     * Busca uma mensagem de validação
     * @param key chave da mensagem
     * @return mensagem
     */
    String getValidationMessage(String key);
}
